﻿using System;
using System.Collections.Generic;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace BCS.Business
{
	public static class PDFUtility
	{
		#region 字段

                private static String fontDir = Environment.GetFolderPath(Environment.SpecialFolder.Fonts);

		public static BaseFont HeiFont = BaseFont.CreateFont(fontDir + @"\simhei.ttf",
						     BaseFont.IDENTITY_H,
						     BaseFont.NOT_EMBEDDED);

		public static BaseFont SunFont = BaseFont.CreateFont(fontDir+ @"\simkai.ttf",
						     BaseFont.IDENTITY_H,
						     BaseFont.NOT_EMBEDDED);

		public static Font LargeFont = new Font(HeiFont, 20);

		public static Font SmallFont = new Font(SunFont, 10);

		public static PdfPCell BlankCell = new PdfPCell(new Phrase(" ", SmallFont));

		public static PdfPCell EmptyCell = new PdfPCell(new Phrase("无", SmallFont));

		#endregion 字段

		#region 方法

		public static Document CreatePdfDocument(String fileName)
		{
			Document doc = new Document();

			PdfWriter.GetInstance(doc, new FileStream(fileName, FileMode.Create));

			return doc;
		}

		public static PdfPCell CreatePdfCell(String text, Font font, int align = 0)
		{
			PdfPCell cell = new PdfPCell(new Phrase(text, font));
			cell.HorizontalAlignment = align;
			return cell;
		}

                
		public static PdfPCell CreateSmallPdfCell(String text, int align = 0)
		{
			return CreatePdfCell(text, SmallFont, align);
		}

		public static void CreateHeader(Document doc, String title)
		{
			//标题
			PdfPTable table = new PdfPTable(1);

			PdfPCell cell = new PdfPCell(new Phrase(title, LargeFont));
			cell.HorizontalAlignment = 1;
			cell.BorderWidth = 0;
			table.AddCell(cell);

			doc.Add(table);

			//空行
			table = new PdfPTable(1);

			cell = new PdfPCell(new Phrase(" ", LargeFont));
			cell.HorizontalAlignment = 1;
			cell.BorderWidth = 0;
			table.AddCell(cell);

			doc.Add(table);
		}

		public static void CreateFooter(Document doc)
		{
			PdfPTable table = new PdfPTable(new float[] { 0.65f, 0.35f });

			PdfPCell cell;

			cell = new PdfPCell(new Phrase("日期：       年   月   日", SmallFont));
			cell.BorderWidth = 0;
			table.AddCell(cell);

			cell = new PdfPCell(new Phrase("负责人：            ", SmallFont));
			cell.BorderWidth = 0;
			table.AddCell(cell);

			doc.Add(table);
		}

		public static void CreateSmallBlankLine(Document doc)
		{
			//空行
			PdfPTable table = new PdfPTable(1);

			PdfPCell cell = new PdfPCell(new Phrase(" ", new Font(HeiFont, 12)));
			cell.HorizontalAlignment = 1;
			cell.BorderWidth = 0;
			table.AddCell(cell);

			doc.Add(table);
		}

		

                //public static void CreateUnitPaperScoreTable(Document doc, Unit unit)
                //{
                //        PdfPCell cell;

                //        //故障试卷成绩表格
                //        PdfPTable faultPaperScroeTable = new PdfPTable(new float[] { 0.15f, 0.7f, 0.15f });

                //        cell = new PdfPCell(new Phrase("序号", ContentFont));
                //        faultPaperScroeTable.AddCell(cell);

                //        switch (unit.UnitType)
                //        {
                //                case UnitType.外观检查:
                //                        cell = new PdfPCell(new Phrase("外观检查报活（共8件，每件5分）", ContentFont));
                //                        faultPaperScroeTable.AddCell(cell);
                //                        break;

                //                case UnitType.电器试验:
                //                        cell = new PdfPCell(new Phrase("检查报活（共设4件，其中外观2件每件5分，未发现失格）", ContentFont));
                //                        faultPaperScroeTable.AddCell(cell);
                //                        break;

                //                case UnitType.制动机检查:
                //                        cell = new PdfPCell(new Phrase("制动机假设故障报活（共设2件，每件10分，未发现失格）", ContentFont));
                //                        faultPaperScroeTable.AddCell(cell);
                //                        break;
                //        }

                //        cell = new PdfPCell(new Phrase("得分", ContentFont));
                //        faultPaperScroeTable.AddCell(cell);

                //        int index = 1;
                //        foreach (var v in unit.ThirdExam.FourthResults)
                //        {
                //                if (v.ScoreType == ScoreType.正确)
                //                {
                //                        cell = new PdfPCell(new Phrase(index.ToString(), ContentFont));
                //                        faultPaperScroeTable.AddCell(cell);
                //                        index++;

                //                        cell = new PdfPCell(new Phrase(v.Part.Name, ContentFont));
                //                        faultPaperScroeTable.AddCell(cell);

                //                        int score = 0;
                //                        if (v.ScoreType == ScoreType.正确)
                //                        {
                //                                score = unit.ThirdFourthPartPoints;
                //                        }

                //                        cell = new PdfPCell(new Phrase(score.ToString(), ContentFont));
                //                        faultPaperScroeTable.AddCell(cell);
                //                }
                //        }

                //        if (index == 1)
                //        {
                //                faultPaperScroeTable.AddCell(BlankCell);

                //                faultPaperScroeTable.AddCell(EmptyCell);

                //                faultPaperScroeTable.AddCell(EmptyCell);
                //        }

                //        doc.Add(faultPaperScroeTable);

                //        //考试试卷成绩表格
                //        PdfPTable examPaperScroeTable = new PdfPTable(new float[] { 0.15f, 0.7f, 0.15f });

                //        examPaperScroeTable.AddCell(Utility.CreateContentPdfCell("序号"));

                //        switch (unit.UnitType)
                //        {
                //                case UnitType.外观检查:
                //                        cell = new PdfPCell(new Phrase("漏检、错检处所（每件5-10分）", ContentFont));
                //                        examPaperScroeTable.AddCell(cell);
                //                        break;

                //                default:
                //                        cell = new PdfPCell(new Phrase("检查漏检（每处5分）", ContentFont));
                //                        examPaperScroeTable.AddCell(cell);
                //                        break;
                //        }

                //        cell = new PdfPCell(new Phrase("扣分", ContentFont));
                //        examPaperScroeTable.AddCell(cell);

                //        index = 1;
                //        foreach (var v in unit.SecondExam.FourthResults)
                //        {
                //                if (v.ScoreType != ScoreType.正确)
                //                {
                //                        cell = new PdfPCell(new Phrase(index.ToString(), ContentFont));
                //                        examPaperScroeTable.AddCell(cell);
                //                        index++;

                //                        cell = new PdfPCell(new Phrase(v.Part.Name, ContentFont));
                //                        examPaperScroeTable.AddCell(cell);

                //                        int score = 0;
                //                        if (v.ScoreType != ScoreType.正确)
                //                        {
                //                                score = v.Part.Points;
                //                        }
                //                        cell = new PdfPCell(new Phrase(score.ToString(), ContentFont));
                //                        examPaperScroeTable.AddCell(cell);
                //                }
                //        }

                //        if (index == 1)
                //        {
                //                examPaperScroeTable.AddCell(BlankCell);

                //                examPaperScroeTable.AddCell(EmptyCell);

                //                examPaperScroeTable.AddCell(EmptyCell);
                //        }

                //        doc.Add(examPaperScroeTable);

                //        CreateMistakeTable(doc, unit.UnSafeMistakes, "操作违反安全", unit.UnSafeText);

                //        CreateMistakeTable(doc, unit.UnCompleteMistakes, "操作损坏部件", unit.UnCompleteText);

                //        CreateMistakeTable(doc, unit.UnProperMistakes, "操作方法错误", unit.UnProperText);

                //        ////合计得分表格
                //        //PdfPTable examScoreTable = new PdfPTable(new float[] { 0.15f, 0.85f });

                //        //cell = new PdfPCell(new Phrase("合计得分", ContentFont));
                //        //examScoreTable.AddCell(cell);

                //        //cell = new PdfPCell(new Phrase(unit.ScoreText, ContentFont));
                //        //examScoreTable.AddCell(cell);

                //        //doc.Add(examScoreTable);

                //        //备注表格
                //        PdfPTable descriptionTable = new PdfPTable(new float[] { 1.0f });

                //        cell = new PdfPCell(new Phrase("备注", ContentFont));
                //        descriptionTable.AddCell(cell);

                //        doc.Add(descriptionTable);
                //}

                //public static void CreateMistakeTable(Document doc, List<Mistake> mistakes, String title, String scoreText)
                //{
                //        PdfPTable table = new PdfPTable(new float[] { 0.15f, 0.7f, 0.15f });
                //        PdfPCell cell;

                //        table.AddCell(CreateContentPdfCell("序号"));
                //        table.AddCell(CreateContentPdfCell(title));
                //        table.AddCell(CreateContentPdfCell("计分"));

                //        table.AddCell(CreateContentPdfCell("1"));

                //        if (mistakes.Count > 0)
                //        {
                //                table.AddCell(CreateContentPdfCell(mistakes[0].Name));
                //        }
                //        else
                //        {
                //                table.AddCell(CreateContentPdfCell("无"));
                //        }

                //        cell = CreateContentPdfCell(scoreText);
                //        cell.Rowspan = mistakes.Count;
                //        table.AddCell(cell);

                //        for (int i = 1; i < mistakes.Count; i++)
                //        {
                //                table.AddCell(CreateContentPdfCell((i + 1).ToString()));
                //                table.AddCell(CreateContentPdfCell(mistakes[i].Name));
                //        }

                //        doc.Add(table);
                //}

                //public static void CreateExamScoreTable(Document doc, Exam exam)
                //{
                //        //创建考生信息表格
                //        PdfPTable table = new PdfPTable(new float[] { 0.1f, 0.3f, 0.1f, 0.2f, 0.1f, 0.2f });

                //        table.AddCell(CreateContentPdfCell("总分"));
                //        table.AddCell(CreateContentPdfCell(exam.PointsText));

                //        table.AddCell(CreateContentPdfCell("扣分"));
                //        table.AddCell(CreateContentPdfCell(exam.DeductionText));

                //        table.AddCell(CreateContentPdfCell("得分"));
                //        table.AddCell(CreateContentPdfCell(exam.ScoreText));

                //        doc.Add(table);
                //}

		#endregion 方法
	}
}